package com.payment.system.service;

import java.util.List;
import java.util.Map;

import com.payment.common.base.AjaxResult;
import com.payment.system.domain.PaymentOrder;
import com.payment.system.vo.EcharsVo;
import org.springframework.web.multipart.MultipartFile;

/**
 * 交易订单 服务层
 *
 * @author payment
 * @date 2019-02-17
 */
public interface IPaymentOrderService {
    /**
     * 查询交易订单信息
     *
     * @param id 交易订单ID
     * @return 交易订单信息
     */
    public PaymentOrder selectPaymentOrderById(String id);

    /**
     * 查询交易订单列表 加密
     *
     * @param paymentOrder 交易订单信息
     * @return 交易订单集合
     */
    public List<PaymentOrder> selectPaymentOrderList(PaymentOrder paymentOrder);

    /**
     * 查询交易订单列表 不加密
     *
     * @param paymentOrder 交易订单信息
     * @return 交易订单集合
     */
    public List<PaymentOrder> selectPaymentOrderListNoEncrypt(PaymentOrder paymentOrder);

    /**
     * 新增交易订单
     *
     * @param paymentOrder 交易订单信息
     * @return 结果
     */
    public int insertPaymentOrder(PaymentOrder paymentOrder);

    /**
     * 修改交易订单
     *
     * @param paymentOrder 交易订单信息
     * @return 结果
     */
    public int updatePaymentOrder(PaymentOrder paymentOrder);

    /**
     * 删除交易订单信息
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deletePaymentOrderByIds(String ids);

    //获取 获取月  还款交易量，收款月交易量，升级分享量
    AjaxResult selectMonthVolume(String merchantPhone, String level);

    //根据上游订单号获取订单
    public PaymentOrder selectPaymentOrderByOrderNo(String settleNo);

    //查询一周的交易总额和交易笔数
    List<EcharsVo> selectPaymentOrderByWeek(String agentId);

    /**
     * app 端交易明细：订单类型（0 无卡消费 1养卡消费 2养卡代付3无卡出款5提现 6充值升级）
     *
     * @param merchantId 用户ID
     * @param pageNum    页数
     * @param pageSize   每页条数
     * @return
     */
    AjaxResult transactionDetailsList(String merchantId, Integer pageNum, Integer pageSize);


    //后台 手动清分
    AjaxResult manualClearing();

    //根据订单状态和 上游code查询
    List<PaymentOrder> selectPaymentOrderListByStatusAndAcqReturnCode(int status, String msg, String createTime);

    //根据订单状态，通道返回码和返回信息成功
    List<PaymentOrder> selectPaymentOrderListByStatusAndAcqReturnCodeAndReturnMsg(int status, String acqCode, String acqMsg);


    Map<String, Object> selectOrderTotalMoney(PaymentOrder paymentOrder);

    //查询用户最新的一条 无卡记录
    AjaxResult getNewestOrderWKByCreditCardIdId(String creditNumber);

    //无卡出款
    AjaxResult daiFuRepairOrderGGWK(String id);

    //退款
    AjaxResult daiFuRepairOrderGG(String id);

    //查询订单
    AjaxResult findOrderGG(String id);

    /**
     * 导入合伙人订单
     */
    AjaxResult uploadPartnerOrder(MultipartFile file);
}
